﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

//在屏幕上打印1~10的值
//while循环
//while(表达式)
	//语句
//int main()
//{
//	int i = 1;
//	while (i <= 10)
//	{
//		printf("%d ", i);
//		i = i + 1;
//	}
//	return 0;
//}

//输⼊⼀个正的整数，逆序打印这个整数的每⼀位
//int main()
//{
//	int num = 0;
//	int result = 0;
//	scanf("%d", &num);
//	while (num)
//	{
//		result = num % 10;
//		printf("%d ", result);
//		num /= 10;
//	}
//	return 0;
//}

//for循环
// for(表达式1; 表达式2; 表达式3)
//		语句；
//表达式1 ⽤于循环变量的初始化
//表达式2 ⽤于循环结束条件的判断
//表达式3 ⽤于循环变量的调整
// 
// 一次循序的执行顺序：
// 先初始化表达式1，再执行表达式2，然后执行语句，最后执行表达式3
//表达式1初始化只被执行一次，剩下的三个在循环


//在屏幕上打印 1~10 的值
//int main()
//{
//	int i = 0;
//	for (i = 1; i <= 10;i++)
//	{
//		printf("%d ", i);
//	}
//	return 0;
//}

//输⼊⼀个正的整数，逆序打印这个整数的每⼀位
//int main()
//{
//	int i = 0;
//	int j = 0;
//	int result = 0;
//	scanf("%d", &i);
//	for (;i!=0;)
//	{
//		result = i % 10;
//		printf("%d ", result);
//		i = i / 10;
//	}
//	return 0;
//}


//计算1~100之间3的倍数的数字之和
//while:
//int main()
//{
//	int i = 1;
//	int sum = 0;
//	while (i <= 100)
//	{
//		if (i % 3 == 0)
//		{
//			sum = sum + i;
//		}
//		i++;
//	}
//	printf("%d", sum);
//	return 0;
//}

//优化：直接只产生3的倍数
//int main()
//{
//	int i = 3;
//	int sum = 0;
//	while (i <= 100)
//	{
//		sum += i;
//		i += 3;
//	}
//	printf("%d", sum);
//	return 0;
//}



//for:
//int main()
//{
//	int i = 0;
//	int sum = 0;
//	for (i = 1; i <= 100; i++)
//	{
//		if (i % 3 == 0)
//		{
//			sum = sum + i;
//		}
//	}
//	printf("%d", sum);
//	return 0;
//}


//优化：直接只产生3的倍数
//int main()
//{
//	int i = 0;
//	int sum = 0;
//	for (i = 3; i <= 100; i += 3)
//	{
//		sum += i;
//	}
//	printf("%d", sum);
//	return 0;
//}

//do-while循环
/*
do
{
	语句
}while(表达式)
*/

//do-while的执行是：先执行循环体，再执行while后的判断条件，如满足则进入循环
//如不满足则挑出循环

//do-while:
//在屏幕上打印1~10的值
// 
//int main()
//{
//	int i = 1;
//	do
//	{
//		printf("%d ", i);
//		i++;
//	} while (i <= 10);
//	return 0;
//}
//
 
//输⼊⼀个正的整数，逆序打印这个整数的每⼀位

//int main()
//{
//	int i = 0;
//	int result = 0;
//	scanf("%d", &i);
//	do
//	{
//		result = i % 10;
//		printf("%d ", result);
//		i = i / 10;
//	} while (i);
//	return 0;
//}

//计算1~100之间3的倍数的数字之和
//int main()
//{
//	int i = 0;
//	int sum = 0;
//	do
//	{
//		if (i % 3 == 0)
//		{
//			sum = sum + i;
//		}
//		i++;
//	} while (i <= 100);
//	printf("%d", sum);
//	return 0;
//}

//输⼊⼀个正整数，计算这个整数是几位数？

//int main()
//{
//	int i = 0;
//	scanf("%d", &i);
//	int count = 0;
//	do
//	{
//		if (i % 10 != 0)
//		{
//			count++;
//		}
//		i /= 10;
//	} while (i);
//	printf("%d", count);
//	return 0;
//}


//循环中的break和continue语句
//break的作用是跳出循环
//continue的作用是跳过本次循环，不执行本次循环的代码
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 6)
			break;
		printf("%d ", i);
		i++;
	}
	return 0;
}

//int main()
//{
//	int i = 0;
//	while (i <= 10)
//	{
//		
//		if (i == 6)
//			continue;
//		printf("%d ", i);
//		i++;
//			 //这样写会造成死循环，这是因为i=6后，就会执行continue语句
//			//不会执行continue后的代码，i就会一直为6
//	}
//	return 0;
//}

//for
//int main()
//{
//	int i = 1;
//	for (i = 1; i <= 10; i++)
//	{
//		if (i == 6)
//			break;
//		printf("%d ", i);
//	}
//	return 0;
//}


//int main()
//{
//	int i = 1;
//	for (i = 1; i <= 10; i++)
//	{
//		if (i == 6)
//			continue;
//		printf("%d ", i);
//	}
//	return 0;
//}

do-while
int main()
{
	int i = 1;
	do
	{
		if (i == 5)
			break;
		printf("%d ", i);
		i = i + 1;
	} while (i <= 10);
}

int main()
{
	int i = 1;
	do
	{
		if (i == 5)
			continue;
		printf("%d ", i);
		i = i + 1; //跟while一样死循环
	} while (i <= 10);
}

//找出100~200之间的素数，并打印在屏幕上。
//注：素数⼜称质数，只能被1和本⾝整除的数字。
//法一
//int main()
//{
//	int i = 0;
//	int j = 0;
//	for (i = 100; i <= 200; i++)
//	{
//		for (j = 2; j <= i-1; j++)
//		{
//			if (i % j == 0)
//			{
//				break;
//			}
//		}
//		if (i == j)
//			printf("%d ", i);
//	}
//	return 0;
//}
//法二
//int main()
//{
//	int i = 0;
//
//	for (i = 100; i <= 200; i++)
//	{
//
//		int j = 0;
//		int flag = 1;
//		for (j = 2; j < i; j++)
//		{
//			if (i % j == 0)
//			{
//				flag = 0;
//				break;
//			}
//		}
//		if (flag == 1)
//			printf("%d ", i);
//	}
//	return 0;
//}

//C语⾔提供了⼀种⾮常特别的语法
//就是 goto 语句和跳转标号，goto语句可以实现在同⼀个函数
//内跳转到设置好的标号处。
int main()
{
	printf("hehe\n");
	goto a;
	printf("haha\n");

a:
	printf("呵呵哈哈\n");
	return 0;
}
//在多层循环中可以使用goto语句挑出循环，使用break要一层一层的跳，从而会使用多个break

